#include <iostream> // defines standard streams
#include <cassert> // defines assert
#include <cstdlib> // defines std:.size_t
#include <functional> // defines std::less
#include <algorithm> // defines std::copy

#include "input_generation.c++"
#include "driver.c++"

int main () {
  typedef std::size_t element;
  typedef element* position;
  typedef std::less<element> ordering;


  std::cout << "Testing sort" << std::endl;
  const std::size_t bign = 300;
  const std::size_t repetitions = 10;
  element a[bign];

  for (std::size_t n = 0; n <= bign; ++n) {

    decreasing_sequence(a, a + n);
    test_sort(a, a + n, ordering());
  
    increasing_sequence(a, a + n);
    test_sort(a, a + n, ordering());
  
    zero_sequence(a, a + n);
    test_sort(a, a + n, ordering());
  
    binary_sequence(a, a + n);
    test_sort(a, a + n, ordering());

    for (std::size_t i = 0; i < repetitions; i++) {
      random_sequence(a, a + n);
      test_sort(a, a + n, ordering());
    }
    std::cout << n << " ok" << std::endl;
  }
  return 0;
}
